#ifndef UNIT_TEST_H
#define UNIT_TEST_H

#include "main.h"

// 最大单元测试检测函数数量
#define UNIT_TEST_INSTANCE_MAX_NUM 8
// 每个测试函数最大参数个数
#define UNIT_TEST_MAX_PARAM_COUNT  8

/**
 * @brief 单元测试结果枚举
 * 
 */
typedef enum {
    UNIT_TEST_RESULT_OK = 0, /*<! 匹配成功，没有返回值 */
    UNIT_TEST_RESULT_OK_WITH_RETVAL, /*<! 匹配成功，有返回值 */
    UNIT_TEST_RESULT_INVALID_PARAM_COUNT, /*<! 匹配成功，参数个数不对 */
    UNIT_TEST_RESULT_INVALID_PARAM_VALUE, /*<! 匹配成功，参数错误 */
    UNIT_TEST_RESULT_NO_MATCH /*<! 匹配失败 */
} unit_test_result_e;

/**
 * @brief 命令结构体
 * 
 */
typedef struct {
    char *name; /*<! 函数名字 */
    uint8_t param_count; /*<! 参数个数 */
    int32_t param[UNIT_TEST_MAX_PARAM_COUNT]; /*<! 参数值 */
} unit_test_command_t;

typedef unit_test_result_e (*unit_test_check_function)(unit_test_command_t *, uint32_t *);

/**
 * @brief 单元测试处理函数
 * 
 * @param passed_ms 调用间隔
 */
void unit_test_handler(uint32_t passed_ms);

/**
 * @brief 注册单元测试检测函数
 * 
 * @param function 测试函数指针
 * @return 注册是否成功
 * @retval 0: 注册成功
 * @retval 其他： 失败
 */
uint8_t unit_test_register_check_function(unit_test_check_function function);

#endif
